package com.xqboss.apps.mapper.guild;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xqboss.apps.domain.guild.Guild;
import com.xqboss.apps.dto.guild.GetGuildListDto;
import com.xqboss.apps.vo.guild.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 公会Mapper
 *
 * @author wangcong
 * @date 2023-11-01
 */
public interface GuildMapper extends BaseMapper<Guild> {

    /**
     * 获取推荐公会列表
     *
     * @param guildId 队伍id-确定操作状态（1-可申请 2-已满员 3-已加入）
     * @param search 检索条件
     * @return 推荐公会列表
     */
    IPage<GuildRecommendVo> guildRecommendList(Page<GuildRecommendVo> page, @Param("guildId") Long guildId, @Param("search") String search);

    /**
     * 公会人数添加数量
     *
     * @param guildId 公会id
     * @param num 添加的数量
     */
    @Update("update guild set member_count=member_count+#{num} where id = #{guildId} and member_count+#{num}<=max_number and del_flag = false")
    boolean guildMemberCountAdd(@Param("guildId") Long guildId,@Param("num") int num);

    /**
     * 公会人数添加数量
     *
     * @param guildId 公会id
     * @param num 添加的数量
     */
    @Update("update guild set member_count=member_count-#{num} where id = #{guildId} and member_count-#{num}>=1 and del_flag = false")
    boolean guildMemberCountSub(@Param("guildId") Long guildId,@Param("num") int num);

    /**
     * 公会首页信息
     *
     * @param guildId 公会id
     * @param userId 已经加入公会的用户id（会长或会员）
     * @return 公会首页信息
     */
    GuildVo guildIndexInfo(@Param("guildId") Long guildId,@Param("userId") Long userId);

    /**
     * 公会大厅公会信息
     *
     * @param guildId 公会id
     * @param userId 登录的用户id
     * @return 公会信息
     */
    GuildHallVo guildHallInfo(@Param("guildId") Long guildId,@Param("userId")Long userId);

    /**
     * 公会大厅成员列表(分页查询)
     *
     * 检索：（用户id | 用户昵称 | 手机号 | 备注）
     *
     * 会长放在第一条数据
     *
     * @param guildId 公会id
     * @param userId 登录用户id
     * @param search 检索
     * @return 成员列表
     */
    IPage<GuildMemberVo> guildHallList(Page<GuildMemberVo> page,@Param("guildId") Long guildId,@Param("userId") Long userId,@Param("search") String search);

    /**
     * 公会大厅成员列表
     *
     * 检索：（用户id | 用户昵称 | 手机号 | 备注）
     *
     * 会长放在第一条数据
     *
     * @param guildId 公会id
     * @param userId 登录用户id
     * @param search 检索
     * @return 成员列表
     */
    List<GuildMemberVo> guildHallList(@Param("guildId") Long guildId,@Param("userId") Long userId,@Param("search") String search);

    /**
     * 邀请会员列表
     *
     * 随机排序，列表过滤当前用户和已再公会的用户信息
     *
     * @param guildId 公会id
     * @param userId 会长用户id
     * @param search 检索
     * @return 邀请会员列表
     */
    IPage<GuildInviteMemberVo> inviteMembersList(Page<GuildInviteMemberVo> page,@Param("guildId") Long guildId,@Param("userId") Long userId,@Param("search") String search);

    /**
     * 转让会员列表
     *
     * 随机排序，列表过滤当前用户信息
     *
     * @param guildId 公会id
     * @param userId 会长用户id
     * @param search 检索
     * @return 邀请会员列表
     */
    IPage<GuildTransferMemberVo> transferMembersList(Page<GuildTransferMemberVo> page,@Param("guildId") Long guildId,@Param("userId") Long userId,@Param("search") String search);

    /**
     * 后台公会列表分页数据
     *
     * @param page
     * @param dto
     * @return
     */
    IPage<WebGuildVo> getGuildList(Page<WebGuildVo> page, @Param("dto") GetGuildListDto<WebGuildVo> dto);
}
